//
//  Man.m
//  07-内存管理
//
//  Created by dllo on 16/7/12.
//  Copyright © 2016年 dllo. All rights reserved.
//

#import "Man.h"

@implementation Man
- (void)dealloc {
    NSLog(@"对象被释放了");
    [_sexual release];
    [_gayBoy release];
    [_name release];
    [super dealloc];
}
// 协议方法的实现,是签订者的实现(@implementation)中
- (void)sayHello {

    NSLog(@"Hello!");

}
//- (instancetype)initWithName:(NSString *)name {
//
//    self = [super init];
//    if (self) {
//        _name = name;
//    }
//    return self;
//}
//
//+ (instancetype)manWithName:(NSString *)name {
//    return [[[Man alloc] initWithName:name]autorelease];
//}
//- (void)Tcopy
//{
//    Man *stu1 = [Man manWithName:@"stu1"];
//    Man *stu2 = [stu1 copy];
//    stu2.name = @"XZQ";
//    NSLog(@"11%@",stu1);
//    NSLog(@"111%@",stu2);
//    [stu2 release];
//}
// 对象的拷贝
- (id)copyWithZone:(NSZone *)zone
{  // 开辟新的空间, 创建了一个新的对象
   Man *man=[[Man allocWithZone:zone] init];
    // 浅拷贝,只创建了新的对象,但是所有的属性还指向原来的属性
    man.name = self.name;
    man.sexual = self.sexual;
    // 深拷贝,不只创建新的对象,所有的属性,也对应的拷贝一份新的.
    man.name = [self.name copy];
    man.sexual = [self.sexual copy];
    return man;
}
// MRC下的setter方法
// assign下修饰的setter
- (void)setAge:(NSInteger)age {
    _age = age;

}

// retain
- (void)setGayBoy:(Man *)gayBoy {
    if (_gayBoy != gayBoy) {
        [_gayBoy release];
        _gayBoy = [gayBoy retain];
    }
}
// copy下的setter方法
- (void)setName:(NSString *)name {
    if (_name != name) {
        [_name release];
        _name = [name copy];
    }
}
// ARC下可以写dealloc ,不可以写 [super dealloc]

@end
